Amazon FSx for Windowsのカスタムバックアップ を使ってみた #reinvent
Amazon FSx for Windows File Serverのバックアップ機能について、おさらいします。 自動バックアップを使うと、1日に1回指定したウィンドウ期間にバックアップを取得し、指定した日数保持します。 自動バックアップとは別にユーザーの好きなタイミングで手動バックアップを取得できます。
カスタムバックアップスケジュールを使うと、CRONスケジュールパターンに従い6時間ごと、週に1度などユーザーが定義したタイミングでバックアップを取得できます。
カスタムバックアップスケジュールとは?
カスタムバックアップスケジュールの実態はCloudWatch Events、AWS Lambda、AWS SNSです。 これらのリソースを簡単にデプロイするCloudFormationテンプレートがユーザーガイドで公開されています。
やってみた
Lambdaをデプロイできなくてはまった
カスタムバックアップをデプロイするリージョンについて、はまりどころがあったので共有します。 カスタムバックアップスケジュールのCloudFormationでは、"solution-references"というS3バケットのfsx/backup/FSxBackupManager.zipをLambda関数として利用します。
CloudFormationのユーザーガイドによると、S3とLambdaは同じリージョンを選択する必要があります。
S3Bucket The name of the Amazon S3 bucket where the .zip file that contains your deployment package is stored. This bucket must reside in the same AWS Region that you're creating the Lambda function in. You can specify a bucket from another AWS account as long as the Lambda function and the bucket are in the same region.
"solution-references"はバージニアリージョンにあるようです。 そのためカスタムバックアップをオレゴンなどバージニアリージョン以外で使う場合、後述のCreate Stackに失敗します。 対応として、一度バージニアにデプロイしたLambda関数のzipファイルを、FSxのリージョンのS3にアップロードし利用しました。 前振りが長くなってしまいましたが、オレゴンでカスタムバックアップを試してみました・
CloudFormationスタックの作成
ユーザーガイドのfsx-scheduled-backup.templateをダウンロードします。
バージニアリージョンのCloudFormationコンソールに接続し、Create Stackを選択します。
fsx-scheduled-backup.templateをアップロードします。
スタック名は任意です。 今回は「FSx-User-scheduled-backup」としました。
パラメーターを入力します。
- FilesystemId: バックアップ対象のFSxのID
- CronSchedule: Cron形式のバックアップスケジュール。"0 0/6 * * ? *"で6時間おきに実行されます
- RetainDays: バックアップを保持する日数。指定した日数より古くなった時にLambda関数がバックアップを削除します
- Name for backups: バックアップの名前。FSxコンソールに表示されるので、わかりやすい名前が望ましい
- Backup notifications: バックアップが正常に開始された時に通知するか。エラーは本設定に関係なく通知されます
- Email address: メールアドレス
その他の設定はデフォルトのままとしました。 「I acknowledge that AWS CloudFormation might create IAM resources with custom names.」にチェックを入れて、Create Stackします。 CloudFormationスタックのステータスがCREATE_COMPLETEになれば、問題ありません。 バージニアリージョンでバックアップしたい場合、これでセットアップは完了です。
Lambda関数のダウンロードと、利用するリージョンへのアップロード
バージニア以外でカスタムバックアップを利用する場合、この手順が必要です。 CloudFormationスタックのResourcesから、AWS::Lambda::Functionのリンクを選択します。 Lambdaコンソールに飛ぶので、アクション>関数のエクスポート>デプロイパッケージのダウンロードを行います。 「FSx-User-scheduled-backup-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx.zip」というzipファイルがダウンロードされます。
ダウンロードしたファイルの名前を「FSxBackupManager.zip」に変更します。 FSxと同じリージョンにS3バケットを作成します。 フォルダ"fsx"を作成し、その下に"backup"フォルダを作成します。 "backup"フォルダに「FSxBackupManager.zip」を配置します。
fsx-scheduled-backup.templateの修正と、Create Stack
fsx-scheduled-backup.templateでは、Lambdaのコードが「S3Bucket: solution-references」と指定されています。 これを先ほど作成したバケットに書き換えます。
Code: S3Bucket: solution-references S3Key: 'fsx/backup/FSxBackupManager.zip'
テンプレートを書き換えたら、バージニアでやったようにCloudFormationコンソールからCreate Stackします。 リージョンはFSxと同じリージョンに切り替えてから実施ください。 CloudFormationスタックのステータスがCREATE_COMPLETEになれば、成功です。
作成されたリソースの確認
CloudFormationで作成されたリソースを確認してみます。 CloudWatchイベントルールをみると、6時間おきにLambda関数が実行されることがわかります。
Lambda関数はFSx-User-scheduled-backupという名前です。 ランタイムはPython3.6です。
メール通知するためのSNSトピックも登録されています。
おわりに
Amazon FSx for Windows File Serverでは、標準で1日に一度自動でバックアップを取得できます。 6時間ごと、週に1度など標準とは異なる周期でバックアップしたい場合は、カスタムバックアップを活用できます。